#ifndef BASE_SYSTEM_LOG_IO_INCLUDE_IO_I_OUTPUT_STRATEGY_H
#define BASE_SYSTEM_LOG_IO_INCLUDE_IO_I_OUTPUT_STRATEGY_H

#include <cstddef>
#include <memory>
#include "system_log_error_code.h"

namespace Base {
namespace SystemLog {
class IOutputStrategy {
public:
    virtual ~IOutputStrategy() = default;
    
    virtual ErrCode Write(const char* data, size_t len) = 0;
    virtual ErrCode Flush() = 0;
    virtual ErrCode Close() = 0;
    
    virtual std::string GetName() const = 0;
};

using OutputStrategyPtr = std::unique_ptr<IOutputStrategy>;
} // namespace SystemLog
} // namespace Base

#endif // BASE_SYSTEM_LOG_IO_INCLUDE_IO_I_OUTPUT_STRATEGY_H